package testes;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import Exceptions.DadosInsuficientesExceptions;
import Exceptions.SomenteNumerosException;

import classes.Endereco;

public class EnderecoTest {
	private Endereco e1;
	
	@Before
	public void setUp() throws Exception{
		e1 = new Endereco("Rua teste", "123", "Bairro teste", "Cidade teste", "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorRuaNull() throws Exception{
		e1 = new Endereco(null, "123", "Bairro teste", "Cidade teste", "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorNumeroNull() throws Exception{
		e1 = new Endereco("Rua teste", null, "Bairro teste", "Cidade teste", "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorBairroNull() throws Exception{
		e1 = new Endereco("Rua teste", "123", null, "Cidade teste", "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorCidadeNull() throws Exception{
		e1 = new Endereco("Rua teste", "123", "Bairro teste", null, "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorEstadoNull() throws Exception{
		e1 = new Endereco("Rua teste", "123", "Bairro teste", "Cidade teste", null, "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorComplementoNull() throws Exception{
		e1 = new Endereco("Rua teste", "123", "Bairro teste", "Cidade teste", "Estado teste", null);
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorRuaVazio() throws Exception{
		e1 = new Endereco("", "123", "Bairro teste", "Cidade teste", "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorNumeroVazio() throws Exception{
		e1 = new Endereco("Rua teste", "", "Bairro teste", "Cidade teste", "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorBairroVazio() throws Exception{
		e1 = new Endereco("Rua teste", "123", "", "Cidade teste", "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorCidadeVazio() throws Exception{
		e1 = new Endereco("Rua teste", "123", "Bairro teste", "", "Estado teste", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorEstadoVazio() throws Exception{
		e1 = new Endereco("Rua teste", "123", "Bairro teste", "Cidade teste", "", "Complemento teste");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testConstrutorComplementoVazio() throws Exception{
		e1 = new Endereco("Rua teste", "123", "Bairro teste", "Cidade teste", "Estado teste", "");
	}
	
	@Test(expected=SomenteNumerosException.class)
	public void testConstrutorNumeroInvalido() throws Exception{
		e1 = new Endereco("Rua teste", "a123", "Bairro teste", "Cidade teste", "Estado teste", "Complemento teste");
	}
	
	
	@Test
	public void testGetRua() {
		Assert.assertEquals("Erro no getRua", "Rua teste", e1.getRua());
	}
	
	@Test
	public void testSetRua() throws Exception{
		e1.setRua("Nova rua teste");
		Assert.assertEquals("Rua nao alterada","Nova rua teste",e1.getRua());
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetRuaVazio() throws Exception{
		e1.setRua("");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetRuaNull() throws Exception{
		e1.setRua(null);
	}
	
	
	
	@Test
	public void testGetNumero() {
		Assert.assertEquals("Erro no getNumero", "123", e1.getNumero());
	}
	
	@Test
	public void testSetNumero() throws Exception{
		e1.setNumero("456");
		Assert.assertEquals("Numero nao alterada","456",e1.getNumero());

	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetNumeroVazio() throws Exception{
		e1.setNumero("");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetNumeroNull() throws Exception{
		e1.setNumero(null);
	}
	
	@Test(expected=SomenteNumerosException.class)
	public void testSetNumeroInvalido() throws Exception{
		e1.setNumero("12ab34");
	}
	
	
	
	@Test
	public void testGetBairro() {
		Assert.assertEquals("Erro no getBairro", "Bairro teste", e1.getBairro());
	}
	
	@Test
	public void testSetBairro() throws Exception{
		e1.setBairro("Novo bairro teste");
		Assert.assertEquals("Rua nao alterada","Novo bairro teste",e1.getBairro());
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetBairroVazio() throws Exception{
		e1.setBairro("");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetBairroNull() throws Exception{
		e1.setBairro(null);
	}

	@Test
	public void testGetCidade() {
		Assert.assertEquals("Erro no getCidade", "Cidade teste", e1.getCidade());
	}
	
	@Test
	public void testSetCidade() throws Exception{
		e1.setCidade("Nova cidade teste");
		Assert.assertEquals("Cidade nao alterada","Nova cidade teste",e1.getCidade());
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetCidadeVazio() throws Exception{
		e1.setCidade("");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetCidadeNull() throws Exception{
		e1.setCidade(null);
	}
	
	@Test
	public void testGetEstado() {
		Assert.assertEquals("Erro no getEstado", "Estado teste", e1.getEstado());
	}
	
	@Test
	public void testSetEstado() throws Exception{
		e1.setEstado("Novo estado teste");
		Assert.assertEquals("Cidade nao alterada","Novo estado teste",e1.getEstado());
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetEstadoVazio() throws Exception{
		e1.setEstado("");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetEstadoNull() throws Exception{
		e1.setEstado(null);
	}
	
	@Test
	public void testGetComplemento() {
		Assert.assertEquals("Erro no getComplemento", "Complemento teste", e1.getComplemento());
	}
	
	@Test
	public void testSetComplemento() throws DadosInsuficientesExceptions{
		e1.setComplemento("Novo Complemento teste");
		Assert.assertEquals("Cidade nao alterada","Novo Complemento teste",e1.getComplemento());
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetComplementoVazio() throws DadosInsuficientesExceptions{
		e1.setComplemento("");
	}
	
	@Test(expected=DadosInsuficientesExceptions.class)
	public void testSetComplementoNull() throws DadosInsuficientesExceptions{
		e1.setComplemento(null);
	}
}
